'''认证聚合方法
-- 技术经理人认证表
CREATE TABLE IF NOT EXISTS wx_manager_authentication (

    wx_id INT PRIMARY KEY, -- 微信号
    real_name VARCHAR(50), -- 真实姓名
    phone_number VARCHAR(50), -- 手机号
    sex VARCHAR(10), -- 性别
    birth_date VARCHAR(50), -- 出生日期
    unit_name VARCHAR(50), -- 单位名称    
    unit_property VARCHAR(50), -- 单位性质
    unit_address VARCHAR(2000), -- 常驻地址
    academic_background VARCHAR(50), -- 教育背景
    -- 职务
    job VARCHAR(50),
    -- 职称
    job_title VARCHAR(50),
    -- 是否持有技术经理人资格证书
    certificate BOOLEAN DEFAULT false,
    -- 证书类型 高 中 低 级
    certificate_level VARCHAR(50),
    -- 获得荣誉
    awards VARCHAR(2000),
    -- 社会兼职
    social_job VARCHAR(200),
    -- 个人简介
    personal_introduction VARCHAR(2000),
    -- 个人照片 一个文件地址
    personal_photo VARCHAR(100),
    -- 个人履历 一个文件地址
    personal_resume VARCHAR(100),
    -- 证件扫描件 一个文件地址
    certificate_photo VARCHAR(100),

    -- 认证状态
    authentication_status BOOLEAN DEFAULT false,
    -- 认证通过时间
    authentication_time TIMESTAMP,

    -- 信息提交时间
    submit_time TIMESTAMP DEFAULT now(),

    FOREIGN KEY (wx_id) REFERENCES wx_user(user_id)

);

-- 机构或企业认证表
CREATE TABLE IF NOT EXISTS wx_organization_authentication (

    wx_id INT PRIMARY KEY, -- 微信号
    -- 机构类型
    organization_type VARCHAR(50),
    -- 机构方向
    organization_direction VARCHAR(50),
    -- 所属区域
    area VARCHAR(50),
    -- 机构地址
    address VARCHAR(2000),
    -- 机构简介
    introduction VARCHAR(2000),
    -- 主营业务
    main_business VARCHAR(2000),
    -- 联系人姓名
    contact_name VARCHAR(50),
    -- 联系电话
    contact_number VARCHAR(50),
    -- 联系人职位
    contact_job VARCHAR(50),
    -- 认证状态
    authentication_status BOOLEAN DEFAULT false,
    -- 认证通过时间
    authentication_time TIMESTAMP,
    -- 信息提交时间
    submit_time TIMESTAMP DEFAULT now(),

    FOREIGN KEY (wx_id) REFERENCES wx_user(user_id)

);

-- 专家认证表
CREATE TABLE IF NOT EXISTS wx_expert_authentication (
    wx_id INT PRIMARY KEY, -- 微信号
    -- 性别
    sex VARCHAR(10),
    -- 学历
    education VARCHAR(50),
    -- 职称
    job_title VARCHAR(50),
    -- 所属机构
    organization VARCHAR(50),
    -- 所属区域
    area VARCHAR(50),
    -- 专业方向
    specialty VARCHAR(50),
    -- 研究方向
    research_direction VARCHAR(50),
    -- 个人简介
    personal_introduction VARCHAR(2000),
    -- 认证状态
    authentication_status BOOLEAN DEFAULT false,
    -- 认证通过时间
    authentication_time TIMESTAMP,
    -- 信息提交时间
    submit_time TIMESTAMP DEFAULT now(),

    FOREIGN KEY (wx_id) REFERENCES wx_user(user_id)

);

'''

import datetime
import logging
import psycopg2


logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
class WxAuthenticationAggregationMethods: 

    def __init__(self, conn, cur):
        self.cursor = cur
        self.conn = conn


    def get_wx_authentication_aggregation(self, wx_id):
        '''获取人员认证状态聚合信息'''

        result = {
            "manager_authentication": False,
            "organization_authentication": False,
            "expert_authentication": False
        }

        # 技术经理人认证状态
        sql = "SELECT authentication_status FROM wx_manager_authentication WHERE wx_id = %s"
        self.cursor.execute(sql, (wx_id,))
        manager_authentication = self.cursor.fetchone()

        # 机构或企业认证状态
        sql = "SELECT authentication_status FROM wx_organization_authentication WHERE wx_id = %s"
        self.cursor.execute(sql, (wx_id,))
        organization_authentication = self.cursor.fetchone()

        # 专家认证状态
        sql = "SELECT authentication_status FROM wx_expert_authentication WHERE wx_id = %s"
        self.cursor.execute(sql, (wx_id,))
        expert_authentication = self.cursor.fetchone()


        if manager_authentication:
            result["manager_authentication"] = manager_authentication["authentication_status"]
        if organization_authentication:
            result["organization_authentication"] = organization_authentication["authentication_status"]
        if expert_authentication:
            result["expert_authentication"] = expert_authentication["authentication_status"]

        return result

        




